package chatUtils

import (
	"context"
	"fmt"
	"log"
	"time"
)

// SessionData 定义会话
type SessionData struct {
	SessionId  string          `json:"sessionId"`  // 会话id
	SessionCtx context.Context `json:"sessionCtx"` // 上下文
	HttpCtx    context.Context `json:"httpCtx"`    // 上下文
	IsSession  bool            `json:"isSession"`  // 是否正在会话
}

// Manager 创建会话管理
var Manager = make(map[string]*SessionData)

// GetDataManager 获取会话信息
func GetDataManager(SessionId string) *SessionData {
	s := Manager[SessionId]
	return s
}

// SetDataManager 设置会话
func SetDataManager(data *SessionData) {
	Manager[data.SessionId] = data
}

// CloseManager 关闭会话
func CloseManager(SessionId string) {
	s := Manager[SessionId]
	if s.IsSession {
		if s.SessionCtx != nil {
			_, cancel1 := context.WithCancel(s.SessionCtx)
			cancel1()
		}
		if s.HttpCtx != nil {
			_, cancel1 := context.WithCancel(s.HttpCtx)
			cancel1()
		}

		s.IsSession = false
	}

}

// DellManager 删除存储
func DellManager(SessionId string) {
	delete(Manager, SessionId)
}
func Heartbeat() {
	for _, a := range Manager {
		if a.IsSession == false {
			DellManager(a.SessionId)
		}
	}
	fmt.Println("管理了会话")
	time.Sleep(time.Second * 10)
}
func Setup() {
	go func() {
		defer func() {
			if r := recover(); r != nil {
				log.Println(r)
			}
		}()
		Heartbeat()
	}()
}
